#-----------------------------------------------------------------------------
# File Name: makefile
# Description
# -----------
# This is the makefile for the AESCDriver project.
#
#-----------------------------------------------------------------------------
SHELL 		= /bin/sh

#-- Release Compiler Flags ---------------------------------------------------

# If we're x86_64 architecture, then we need to do 32 bit compiles
ifeq ($(shell arch), x86_64)
M32 = -m32
endif

CXXFLAGS	+= -O2 -g0 -Wall -I. -I.. -I../.. -Wno-sign-compare -fno-strict-aliasing \
                   -Wno-write-strings -Wno-deprecated-declarations -pipe -fomit-frame-pointer -D_GNU_SOURCE

CFLAGS		+= -O2 -g0 -Wall -I. -I.. -I../.. -Wno-sign-compare -fno-strict-aliasing \
                   -Wno-write-strings -pipe -fomit-frame-pointer -D_GNU_SOURCE

#-- Required libraries -------------------------------------------------------

LIBS		 	 =  -lusb-1.0 -lrt -lstdc++ -lpthread -ldl
LIBS32		 	 =  -lusb-1.0 -lrt -lstdc++ -lpthread -ldl
LIBSNOTUSB		 =  -lrt -lstdc++ -lpthread -ldl

#-- Dependencies -------------------------------------------------------------

AESC_DRIVER_OBJS  = LinuxMain.o DriverFuncs.o ReadConfig.o ../libftdi.o ../libhid.o ../UsbAccess.o ../VcpLinux.o ../HidLinux.o ../FtdiAccess.o ../UsbMilan.o
AESC_DRIVER_DEPS  = DriverFuncs.h ../Ftdi.h ../../Configuration.h

PAYLINK_DRIVER_OBJS = LinuxMain.o32 DriverFuncs.o32 ReadConfig.o32 ../libftdi.o32 ../libhid.o32 ../UsbAccess.o32 ../FtdiAccess.o32 ../VcpLinux.o32 ../HidLinux.o32 ../UsbMilan.o32
PAYLINK_OBJS = LinuxCode/USBPaylink.o \
        LinuxCode/PiGPIO.o \
        LinuxCode/Acceptor.o \
        LinuxCode/BNVCrypt.o \
        LinuxCode/ccBcr.o \
        LinuxCode/ccCoinAc.o \
        LinuxCode/ccHopper.o \
        LinuxCode/ccInnov.o \
        LinuxCode/CCNetPort.o \
        LinuxCode/CCNetRecycler.o \
        LinuxCode/ccNote.o \
        LinuxCode/ccNV200.o \
        LinuxCode/ccOEM.o \
        LinuxCode/ccPort.o \
        LinuxCode/ccSmartHopper.o \
        LinuxCode/ccVegaRC.o \
        LinuxCode/ccICT.o \
        LinuxCode/DESDevice.o \
        LinuxCode/DESEncrypt.o \
        LinuxCode/AESDevice.o \
        LinuxCode/AESEncryption.o \
        LinuxCode/EBDSNote.o \
        LinuxCode/EBDSPort.o \
        LinuxCode/GPTNote.o \
        LinuxCode/GPTPort.o \
        LinuxCode/Random.o \
        LinuxCode/SSPCodes.o \
        LinuxCode/SSPNote.o \
        LinuxCode/SSPPort.o \
        LinuxCode/SSPPrinter.o \
        LinuxCode/ccCls.o \
        LinuxCode/TFlex.o \
        LinuxCode/TFlexPort.o \
        LinuxCode/Device.o \
        LinuxCode/Printer.o \
        LinuxCode/Encrypt.o \
        LinuxCode/Escrow.o \
        LinuxCode/MDBPort.o \
        LinuxCode/MdbChanger.o \
        LinuxCode/MdbTube.o \
        LinuxCode/MdbBill.o \
        LinuxCode/MdbCashless.o \
        LinuxCode/MDBSwLite.o \
        LinuxCode/Cashless.o \
        LinuxCode/F56.o \
        LinuxCode/F56Port.o \
        LinuxCode/Hopper.o \
        LinuxCode/HostIFace.o \
        LinuxCode/ID003Note.o \
        LinuxCode/ID003Port.o \
        LinuxCode/AESPort.o \
        LinuxCode/IOLocal.o \
        LinuxCode/Merkur.o \
        LinuxCode/MFS.o \
        LinuxCode/MFSPort.o \
        LinuxCode/Port.o
        
        
        
        
#-- Compile All --------------------------------------------------------------

.PHONEY: all
all: 	AESCDriver

#-- Clean Up -----------------------------------------------------------------

.PHONEY: clean
clean:
	rm -f ../FtdiAccess.o* ../FtdiMilan.o* ../VcpLinux.o* 
	rm -f *.[bo]*
	rm -f *.err
	rm -f AESCDriver Paylink PaylinkBNR findlibusb

#-- Install ------------------------------------------------------------------

.PHONEY: install
install:
	if [ -e "AESCDriver" ]; then cp -fv AESCDriver /usr/local/bin/AESCDriver ; chown root /usr/local/bin/AESCDriver ; chmod 6755 /usr/local/bin/AESCDriver ; fi
	if [ -e "Paylink" ]   ; then cp -fv Paylink    /usr/local/bin/Paylink ;    chown root /usr/local/bin/Paylink    ; chmod 6755 /usr/local/bin/Paylink    ; fi
	if [ -e "PaylinkBNR" ]; then cp -fv PaylinkBNR /usr/local/bin/PaylinkBNR ; chown root /usr/local/bin/PaylinkBNR ; chmod 6755 /usr/local/bin/PaylinkBNR ; fi

#-- Build targets ------------------------------------------------------------

%.o32 : %.cpp
		$(CXX) $(M32) $(CXXFLAGS) -c -DLinuxPaylink -o $*.o32 $*.cpp

%.o32 : %.c
		$(CC)   $(M32) $(CFLAGS)  -c -DLinuxPaylink -o $*.o32 $*.c

%.odll : %.cpp
		$(CXX) $(M32) $(CXXFLAGS) -c -I../DriverDLLs -fpermissive -DLinuxPaylink -DPROCESSOR=PC -o $*.odll $*.cpp

AESCDriver:	$(AESC_DRIVER_OBJS)
		rm -f AESCDriver
		$(CC) $(AESC_DRIVER_OBJS) $(CFLAGS) $(LIBS) -o AESCDriver

#
#  findlibusb finds the correct folder for libusb, so that it can be supplied as
#  as parameter to the subsequent Paylink link
#

findlibusb: findlibusb.o32
		$(CC) $(M32) findlibusb.o32 $(CFLAGS) $(LIBSNOTUSB) -o findlibusb

Paylink:	$(PAYLINK_DRIVER_OBJS) $(PAYLINK_OBJS) findlibusb
		rm -f Paylink
		$(CC) $(M32) $(PAYLINK_DRIVER_OBJS) $(PAYLINK_OBJS) -no-pie -Wl,--defsym=_Z12CreateDeviceP7DLLLink=0 \
								  `./findlibusb` $(CFLAGS) $(LIBS32) -o Paylink
		

PaylinkBNR:	$(PAYLINK_DRIVER_OBJS) $(PAYLINK_OBJS) ../DriverDLLs/MEIBNR.odll findlibusb
		rm -f PaylinkBNR
		$(CC) $(M32) $(PAYLINK_DRIVER_OBJS) $(PAYLINK_OBJS) ../DriverDLLs/MEIBNR.odll \
								  `./findlibusb` $(CFLAGS) $(LIBS32) -lBnrCtlL32 -o PaylinkBNR

#-- Check on headers ---------------------------------------------------------

AESCDriver.o: $(AESC_DRIVER_DEPS)

#------------------------------ END OF FILE ----------------------------------

